import asyncio
from concurrent.futures import ThreadPoolExecutor
from net.net_logger import log_error


async def async_log_error(
    bh: str, message: str, thread_pool: ThreadPoolExecutor = None
):
    """异步记录错误日志"""
    if thread_pool:
        await asyncio.get_event_loop().run_in_executor(
            thread_pool, log_error, bh, message
        )
    else:
        # 如果没有提供线程池，直接调用（可能阻塞）
        log_error(bh, message)


async def run_in_executor_safe(
    func, *args, thread_pool: ThreadPoolExecutor = None, **kwargs
):
    """
    安全地在执行器中运行函数

    Args:
        func: 要执行的函数
        *args: 函数参数
        thread_pool: 线程池
        **kwargs: 函数关键字参数

    Returns:
        函数执行结果
    """
    if thread_pool:
        return await asyncio.get_event_loop().run_in_executor(
            thread_pool, func, *args, **kwargs
        )
    else:
        # 如果没有线程池，直接执行（可能阻塞）
        return func(*args, **kwargs)
